/* 
  es module
  使用es module 将自动采用严格模式

  es module 中 export 和 import 是关键字;
  import 除了可以当作关键字外,还有一个 import 函数,他是用于动态加载模块的,返回值是一个promise

  es module 是在 编译期(静态分析)就去解析的

  是异步去加载的(<script type="module" src="./2.js"></script>),给了这个type=module 相当于 给标签加了一个 async属性

  不支持file 协议

  导出的几种常用方式
    1. export const age = 18

    2. export {
          这里不是写对象,这里只是写导出的变量的引用列表(类似于java的数组)
          可以写别名 (xx as XXX) XXX 就是你起的别名
        }
    3. export default 默认导出,只能有一个默认导出

  常见的导入方式
    1. import {} from 'xxxx', 类似于上2(作用类似于解构赋值) , 也可以起别名

    2. import * as XX(对象) from 'xxx' 从xxx 中 将所有导出的变量,集成在XX对象上,如果是默认导出的,他会是XX.default

  混合写法: 导入加导出
        export * from 'xxx' 全部导出
        export {} from 'xxx' 部分导出


  导出与引用实际上是对变量标识符的引用,与CommonJs的对象的引用赋值不同,并且在引入的文件中无法去修改变量的值

  原理:
        实际上是在引入和导出时创建了一个模块环境记录空间,在这里面做了一个变量的引用, 类似于绑定了一个const 变量为引入的变量
        
*/
    

console.log("es module 支持了");

let name = {
  a:1
}

setTimeout(()=>{
  console.log(name.a);
  name.a = 2
},1000)
setTimeout(()=>{
  console.log(name.a);
},4000)
export {
  name
}
